#include "reg_mod_nota_credito_recibida.h"
#include "ui_reg_mod_nota_credito_recibida.h"

Reg_mod_nota_credito_recibida::Reg_mod_nota_credito_recibida(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Reg_mod_nota_credito_recibida)
{
    ui->setupUi(this);
    ui->proveedorLineEdit->setText("");
    ui->numeroNotaLineEdit->setFocus();

    //formato factura 3-3-8
    // ui->numeroFacturaLineEdit->setInputMask("999-999-99999999");
    ui->fechaEmisionDateEdit->setDate(QDate::currentDate());
    validatorNum = new QIntValidator(1, 999999999);
    ui->montoTotalLineEdit->setValidator(validatorNum);

    //Completer para numero de factura
    QStringList *listaFacturas = new QStringList();

    foreach (const Compra &com, compras)
    {
        if (com.getEstado() != "")
        {
            listaFacturas->append(com.getNumero_factura());
        }
    }

    QCompleter *completer = new QCompleter(*listaFacturas);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    ui->numeroFacturaLineEdit->setCompleter(completer);
}

Reg_mod_nota_credito_recibida::~Reg_mod_nota_credito_recibida()
{
    delete ui;
}

//Al presionar enter
void Reg_mod_nota_credito_recibida::keyPressEvent(QKeyEvent *evento)
{
    if (ui->numeroFacturaLineEdit->hasFocus())
    {
        compraVar = compras.filter(QDjangoWhere("numero_factura", QDjangoWhere::Equals, ui->numeroFacturaLineEdit->text().simplified())).at(0);
        if (compraVar != NULL)
        {
            ui->proveedorLineEdit->setText(compraVar->getProveedor()->getNombre());
        }
        else
        {
            cuadroMensaje("<p align = 'center'>Verifique el n&uacute;mero de factura</p>",
                          "<p align = 'left'>El n&uacute;mero de factura no se encuentra registrado en ninguna compra</p>");
        }
    }

    if (ui->montoTotalLineEdit->hasFocus())
    {
        if (ui->numeroFacturaLineEdit->text() != "" && ui->proveedorLineEdit->text() != "")
        {
            if (ui->montoTotalLineEdit->text().toDouble() > compraVar->getTotal())
            {
                cuadroMensaje("<p align = 'center'>Verifique el monto ingresado</p>",
                              "<p align = 'left'>El monto ingresado supera al monto de la factura</p>", "error");
            }
            else
            {
                double saldo = compraVar->getTotal() - ui->montoTotalLineEdit->text().toDouble();
                ui->saldoLineEdit->setText(QString::number(saldo));

                double iva = saldo * (ui->porcIvaComboBox->currentText().toDouble() / 100);
                ui->montoIvaLineEdit->setText(QString::number(iva));
            }
        }
    }
}

//Registrar
void Reg_mod_nota_credito_recibida::on_registrarPushButton_clicked()
{
    compraVar = compras.filter(QDjangoWhere("numero_factura", QDjangoWhere::Equals, ui->numeroFacturaLineEdit->text().simplified())).at(0);

    if (ui->numeroNotaLineEdit->text().simplified() == ""
            || ui->numeroFacturaLineEdit->text().simplified() == ""
            || ui->conceptoComboBox->currentText().simplified() == ""
            || ui->fechaVencimientDateEdit->date() < ui->fechaEmisionDateEdit->date()
            || ui->montoTotalLineEdit->text().simplified() == "0"
            || !numeroFacturaEsValido(ui->numeroFacturaLineEdit->text())
            || compraVar == NULL)
    {
        if (ui->numeroNotaLineEdit->text().simplified() == "")
        {
            ui->numeroNotaLineEdit->setFocus();
            QToolTip::showText(ui->numeroNotaLineEdit->mapToGlobal(QPoint(10,8)), "Campo Obligatorio");
        }
        else if (ui->numeroFacturaLineEdit->text().simplified() == "")
        {
            ui->numeroFacturaLineEdit->setFocus();
            QToolTip::showText(ui->numeroFacturaLineEdit->mapToGlobal(QPoint(10,8)), "Campo Obligatorio");
        }
        else if (ui->conceptoComboBox->currentText().simplified() == "")
        {
            ui->conceptoComboBox->setFocus();
            QToolTip::showText(ui->conceptoComboBox->mapToGlobal(QPoint(10,8)), "Campo Obligatorio");
        }
        else if (ui->fechaVencimientDateEdit->date() < ui->fechaEmisionDateEdit->date())
        {
            ui->fechaVencimientDateEdit->setFocus();
            QToolTip::showText(ui->fechaVencimientDateEdit->mapToGlobal(QPoint(10,8)), "Fecha invalida");
        }
        else if (ui->montoTotalLineEdit->text().simplified() == "0")
        {
            ui->montoTotalLineEdit->setFocus();
            QToolTip::showText(ui->montoTotalLineEdit->mapToGlobal(QPoint(10,8)), "Campo Obligatorio");
        }
        else if (!numeroFacturaEsValido(ui->numeroFacturaLineEdit->text()))
        {
            ui->numeroFacturaLineEdit->setFocus();
            QToolTip::showText(ui->numeroFacturaLineEdit->mapToGlobal(QPoint(10,8)), "Nro. de Factura invalido");
        }
        else if (compraVar == NULL)
        {
            ui->numeroFacturaLineEdit->setFocus();
            QToolTip::showText(ui->numeroFacturaLineEdit->mapToGlobal(QPoint(10,8)), "Nro. de Factura no existe");

        }
        else if (existeEnLaBD("nota_credito_recibida", "numero_nota_credito", ui->numeroNotaLineEdit->text()))
        {
            cuadroMensaje("<p align = 'center'>Verifique el n&uacute;mero de nota de cr&eacute;dito</p>",
                          "<p align = 'left'>El n&uacute;mero de nota de cr&eacute;dito ya existe</p>", "error");
        }
        else
        {
            QDjango::setDebugEnabled(true);
            //TODO: Validaciones de reglas de negocio
            //TODO: Insertar en la bd
        }
    }
}

//Cancelar
void Reg_mod_nota_credito_recibida::on_cancelarPushButton_clicked()
{
    this->close();
}
